package pe.com.empresa.servicios.impl;

import java.util.List;

import pe.com.empresa.datos.dao.SolicitudRequisicionDetalleMapper;
import pe.com.empresa.datos.dominio.ConsultaFiltroSolicitudes;
import pe.com.empresa.datos.dominio.ConsultaFiltroSolicitudesCriteria;
import pe.com.empresa.datos.dominio.ConsultaObtenerDetalleSolicitudRequisicion;
import pe.com.empresa.datos.dominio.ConsultaObtenerDetalleSolicitudRequisicionCriteria;
import pe.com.empresa.datos.dominio.ConsultaObtenerSolicitudRequisicion;
import pe.com.empresa.datos.dominio.ConsultaObtenerSolicitudRequisicionCriteria;
import pe.com.empresa.datos.dominio.SolicitudRequisicionDetalle;
import pe.com.empresa.datos.dominio.SolicitudRequisicionDetalleExample;
import pe.com.empresa.servicios.servicio.BuscarSolicitudRequisicionService;
import pe.com.empresa.utiles.ServiceHelper;

public class BuscarSolicitudRequisicionServiceImpl extends ServiceHelper implements
		BuscarSolicitudRequisicionService {

	@SuppressWarnings("unchecked")
	@Override
	public List<ConsultaFiltroSolicitudes> obtenerSolicitudesFiltro(ConsultaFiltroSolicitudesCriteria criteria) throws Exception {
		this.openSession();
		List<ConsultaFiltroSolicitudes> list = (List<ConsultaFiltroSolicitudes>) this.selectByCriteria("ConsultaFiltroSolicitudes", criteria);
		this.closeSession();
		return list;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<ConsultaFiltroSolicitudes> obtenerSolicitudesFiltroPorDefecto(ConsultaFiltroSolicitudesCriteria criteria) throws Exception {
		this.openSession();
		List<ConsultaFiltroSolicitudes> list = (List<ConsultaFiltroSolicitudes>) this.selectByCriteria("ConsultaFiltroSolicitudes","consultaFiltroSolicitudesPorDefecto", criteria);
		this.closeSession();
		return list;
	}

	@SuppressWarnings("unchecked")
	@Override
	public 	ConsultaObtenerSolicitudRequisicion obtenerSolicitudRequisicion(String numeroSolicitudRequisicion)
			throws Exception {
		
		ConsultaObtenerSolicitudRequisicionCriteria criteria = new ConsultaObtenerSolicitudRequisicionCriteria();
		criteria.setNumeroSolicitudRequisicion(numeroSolicitudRequisicion);
		
		ConsultaObtenerSolicitudRequisicion solicitud = null;
		this.openSession();
		List<ConsultaObtenerSolicitudRequisicion> list = (List<ConsultaObtenerSolicitudRequisicion>) this.selectByCriteria("ConsultaObtenerSolicitudRequisicion", criteria);
		if(!list.isEmpty()){
			solicitud = list.get(0);
		}
		this.closeSession();
		return solicitud;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<ConsultaObtenerDetalleSolicitudRequisicion> obtenerDetalleSolicitudRequisicion(String numeroSolicitudRequisicion) throws Exception {
		
		ConsultaObtenerDetalleSolicitudRequisicionCriteria criteria = new ConsultaObtenerDetalleSolicitudRequisicionCriteria();
		criteria.setNumeroSolicitudRequisicion(numeroSolicitudRequisicion);
		
		this.openSession();
		List<ConsultaObtenerDetalleSolicitudRequisicion> list = (List<ConsultaObtenerDetalleSolicitudRequisicion>) this.selectByCriteria("ConsultaObtenerDetalleSolicitudRequisicion", criteria);
		this.closeSession();
		return list;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<ConsultaFiltroSolicitudes> obtenerSolicitudesFiltroPorArea(
			ConsultaFiltroSolicitudesCriteria criteria) throws Exception {
		this.openSession();
		List<ConsultaFiltroSolicitudes> list = (List<ConsultaFiltroSolicitudes>) this.selectByCriteria("ConsultaFiltroSolicitudes","consultaFiltroSolicitudesPorArea", criteria);
		this.closeSession();
		return list;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<ConsultaFiltroSolicitudes> obtenerSolicitudesFiltroPorDefectoPorArea(
			ConsultaFiltroSolicitudesCriteria criteria) throws Exception {
		this.openSession();
		List<ConsultaFiltroSolicitudes> list = (List<ConsultaFiltroSolicitudes>) this.selectByCriteria("ConsultaFiltroSolicitudes","consultaFiltroSolicitudesPorDefectoPorArea", criteria);
		this.closeSession();
		return list;
	}

	@Override
	public SolicitudRequisicionDetalle obtenerDetalleSolicitudRequisicion(
			String numeroSolicitud, String codigoArticulo) throws Exception {
		SolicitudRequisicionDetalle detalle = null;
		this.openSession();
		SolicitudRequisicionDetalleMapper mapper = this.getSession().getMapper(SolicitudRequisicionDetalleMapper.class);
		SolicitudRequisicionDetalleExample example = new SolicitudRequisicionDetalleExample();
		example.createCriteria().andNumeroSolicitudRequisicionEqualTo(numeroSolicitud).
								 andCodigoArticuloEqualTo(codigoArticulo);
	    List<SolicitudRequisicionDetalle> allRecords = mapper.selectByExample(example);
	    if(!allRecords.isEmpty()){
	    	detalle = allRecords.get(0);
	    }
		this.closeSession();
		return detalle;
	}

}
